//
// Created by Crestimes on 24-6-8.
//

#ifndef BASEALGORITHM_H
#define BASEALGORITHM_H
#define LINE cout << "---------------------------------------" << endl
#include <set>
#include <string>
#include <vector>
using namespace std;


class BaseAlgorithm {
public:
    BaseAlgorithm(const vector<int>& pageList, const int maxSize) : pageList(pageList), maxSize(maxSize) {
    }

    // 开始入口
    void start(const bool& log);

    // 给每个子类重写的方法，内容是在缺页且需要更换页面时的操作
    virtual void doSomethingWhenLimit(int pos, int& out) = 0;

    // 展示最终数据
    void show();

    virtual ~BaseAlgorithm() = default;

protected:
    string algorithmName; // 算法名称
    vector<int> pageList; // 输入的页面序列
    vector<int> pagesNow; // 现有的页面
    vector<int> outPageList; // 换出的页面序列
    vector<vector<int>> showList; // 展示整个过程的列表
    int maxSize; // 可以容纳的最多页数
    set<int> limitIndex; // 缺页发生时的下标
};


#endif //BASEALGORITHM_H
